home *** CD-ROM | disk | FTP | other *** search
/ The Photo Companion / PCD1501 (Track 1).bin / merged.iso / disk1 / 32sinst.ms_ / 32sinst.ms
Encoding:
Text File  |  1996-03-07  |  40.2 KB  |  1,267 lines

  1. '**************************************************************************
  2. '*                  MS Test script for Win32s setup program
  3. '**************************************************************************
  4.  
  5. '' $DEFINE DEBUG  ''Define for script development/debugging
  6.  
  7. '$INCLUDE 'setupapi.inc'
  8. '$INCLUDE 'msdetect.inc'
  9.  
  10. ''Dialog ID's
  11. CONST WELCOME16                = 100
  12. CONST WELCOMENT                = 101
  13. CONST WELCOME95                = 101
  14.  
  15. CONST ASKQUIT                  = 200
  16. CONST DESTPATH                 = 300
  17. CONST EXITFAILURE              = 400
  18. CONST EXITQUIT                 = 600
  19. CONST EXITSUCCESS              = 700
  20. CONST OPTIONS                  = 800
  21. CONST BADPATH                  = 6400
  22.  
  23. CONST ERRORLOWMEM           = 10
  24. CONST ADDSHARE                 = 250
  25. CONST HELPSHARE                = 251
  26. CONST TOOBIG1               = 6301
  27. CONST TOOBIG2               = 6302
  28. CONST LOCOLORRES               = 6320
  29. CONST MONOMODE                 = 6330
  30. CONST WIN95               = 6331
  31. CONST DOSVersionWarn           = 6401
  32. CONST HPVersionWarn           = 6402
  33.  
  34. CONST HELPWELCOME              = 1000
  35. CONST VERPATH                  = 1100
  36. CONST EXITFAILNOTWIN31         = 1200
  37. CONST EXITFAILNOTENH           = 1300
  38. CONST EXITFAILNOT386           = 1310
  39. CONST EXITFAILLOWMEM           = 1311
  40. CONST EXITFAILNOTPAGING        = 1325
  41. CONST EXITFAILNOTINTEL         = 1350
  42. CONST EXITFAILRUNAPP           = 1360
  43. CONST EXITFAILOLE32S           = 1361
  44. CONST EXITFAILFOTO             = 1362
  45. CONST FREECELLINST             = 1400
  46. CONST FREECELLINSTNOWIN32S     = 1450
  47. CONST FREECELLPATH             = 1500
  48. CONST HELPFREECELL             = 1600
  49. CONST HELPFREEPATH             = 1601
  50.  
  51. CONST HELPDOWNLOAD             = 1611
  52. CONST DOWNLOADPATH             = 1510
  53.  
  54. ''Bitmap ID
  55. CONST LOGO = 1
  56.  
  57. ''GetTempFileName flags
  58. CONST TF_FORCEDRIVE            = 128
  59.  
  60. GLOBAL DESTWIN$      ''Windows directory.
  61. GLOBAL DESTSYS$      ''Windows\System directory.
  62. GLOBAL DEST32S$      ''Windows\System\Win32s directory
  63. GLOBAL DESTFREE$     ''Freecell directory
  64. GLOBAL OLE_PROTECT%  ''Indicates whether ole2 dlls were protected from being
  65.                      '' copied.
  66. GLOBAL OLE_OLEBOOT%
  67. GLOBAL VERNUM$       '' Win32s Version Number (i.e., for v1.25 VERNUM$="125"
  68.  
  69. GLOBAL DESTPODW$     ''PhotoWorks directory
  70. GLOBAL DESTIMG$      ''Images directory
  71. GLOBAL DESTALB$      ''Albums directory
  72. GLOBAL DESTSAMP$     ''Sample directory
  73. GLOBAL DESTUTIL$     ''Utilities directory
  74.  
  75. GLOBAL FILE1$        
  76. GLOBAL FILE2$        
  77. GLOBAL FILE3$        
  78. GLOBAL FILE4$        
  79. GLOBAL FILE5$        
  80. GLOBAL FILE6$        
  81. GLOBAL FILE7$        
  82. GLOBAL FILE8$        
  83.  
  84. GLOBAL ALBUM1Old$         ''Old album #1
  85. GLOBAL ALBUM2Old$         ''Old album #2
  86.  
  87. GLOBAL ALBUM1New$         ''New album #1
  88. GLOBAL ALBUM2New$         ''New album #2
  89.  
  90. GLOBAL PageOver$
  91.  
  92. GLOBAL Pages%
  93. GLOBAL Mem%
  94. GLOBAL Mem1%
  95. GLOBAL KMem
  96. GLOBAL BPP%
  97. GLOBAL Rows%
  98. GLOBAL Cols%
  99. GLOBAL FREESPACE
  100.  
  101. GLOBAL PODWDrive$
  102. GLOBAL SHARE%
  103. GLOBAL Handle%
  104.  
  105. GLOBAL SHARENAME$
  106. GLOBAL HPDRVRNAME$
  107. GLOBAL OnWindows95%
  108. GLOBAL OnWin32s95%
  109.  
  110. DECLARE SUB Install(OLEONLY%, OLE2_32%, OLE2_16%, OLE2AUTO_16%, OLE16RUNAPP%)
  111. DECLARE SUB RecoverFromCopy(szFileName$)
  112. DECLARE SUB UpdateSystemIni
  113. DECLARE FUNCTION RebootSystem(OLEONLY%) AS INTEGER
  114. DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING
  115. DECLARE FUNCTION MakeSystemIni LIB "INIUPD.DLL" (arg1$, arg2$) AS INTEGER
  116. DECLARE FUNCTION RestartWindows LIB "INIUPD.DLL" AS INTEGER
  117. DECLARE FUNCTION OnWindowsNT LIB "INIUPD.DLL" AS INTEGER
  118. DECLARE FUNCTION PagingEnabled LIB "INIUPD.DLL" AS INTEGER
  119. DECLARE FUNCTION ShareEnabled LIB "INIUPD.DLL" AS INTEGER
  120. DECLARE FUNCTION IsWin32sLoaded LIB "INIUPD.DLL" (arg1$) AS INTEGER
  121. DECLARE FUNCTION IsRunningApp LIB "INIUPD.DLL" AS INTEGER
  122. DECLARE FUNCTION SetCuiFlags LIB "MSCUISTF.DLL" (arg1%, arg2%) AS INTEGER
  123. DECLARE FUNCTION ExitWindowsExec LIB "USER.EXE" (arg1$, arg2$) AS INTEGER
  124. DECLARE FUNCTION GetModuleHandle LIB "KRNL386.EXE" (arg1$) AS INTEGER
  125. DECLARE FUNCTION LoadLibrary LIB "KRNL386.EXE" (arg1$) AS INTEGER
  126. DECLARE SUB FreeLibrary LIB "KRNL386.EXE" (arg1%)
  127. DECLARE FUNCTION SetErrorMode LIB "KRNL386.EXE" (arg1%) AS INTEGER
  128.  
  129. DECLARE FUNCTION GetTempFileName LIB "KRNL386.EXE" (drive%, prefix$, u%, filename$) AS INTEGER
  130. DECLARE SUB WriteLine LIB "INIUPD.DLL" (filename$, text$)
  131. DECLARE FUNCTION GetTempFileAt(szDir$, szPrefix$) as string
  132.  
  133. DECLARE FUNCTION GetDisplayRows LIB "DISPSTS.DLL" AS INTEGER
  134. DECLARE FUNCTION GetDisplayCols LIB "DISPSTS.DLL" AS INTEGER
  135. DECLARE FUNCTION GetDisplayBPP  LIB "DISPSTS.DLL" AS INTEGER
  136. DECLARE FUNCTION GetTotalPhysicalMemory LIB "MEMSTS.DLL" AS LONG
  137. DECLARE FUNCTION FRemoveProgmanGroup LIB "MSINSSTF.DLL" (arg1$,arg2%) AS INTEGER
  138.  
  139. DECLARE FUNCTION _lcreat LIB "KRNL386.EXE" (arg1$, arg2%) AS INTEGER
  140. DECLARE FUNCTION _lwrite LIB "KRNL386.EXE" (arg1%, arg2$, arg3%) AS INTEGER
  141. DECLARE FUNCTION _lclose LIB "KRNL386.EXE" (arg1%) AS INTEGER
  142.  
  143. INIT:
  144.     CUIDLL$ = "mscuistf.dll"            '' Custom user interface dll
  145.     HELPPROC$ = "FHelpDlgProc"          '' Help dialog procedure
  146.     szOldVer$ ="1.00.000     "          '' Reserve space in string for version
  147.     WIN32ENABLED% = 0
  148.     OLEONLY% = 0
  149.     OLE2_16% = 0
  150.     OLE2AUTO_16% = 0
  151.     OLE16RUNAPP% = 0
  152.     OLE_PROTECT% = 0
  153.     OLE_OLEBOOT% = 0
  154.  
  155.     OnWindows95%=0
  156.     SHARE%=0
  157.  
  158.     ON ERROR GOTO ERRNORMAL
  159.  
  160.     SrcDir$ = GetSymbolValue("STF_SRCDIR")
  161.  
  162.     szInf$ = GetSymbolValue("STF_SRCINFPATH")
  163.     IF szInf$ = "" THEN
  164.         szInf$ = GetSymbolValue("STF_CWDDIR") + "32sinst.inf"
  165.     END IF
  166.     ReadInfFile szInf$
  167.  
  168.     SetBitmap CUIDLL$, LOGO
  169.  
  170.     WIN32SVER$ = MID$(GetSectionKeyVersion("WindowsSystem", "win32s16"), 1, 4)
  171.     SetTitle "Microsoft Win32s version " + WIN32SVER$ + " Setup Program"
  172.     VERNUM$ = MID$(WIN32SVER$, 1, 1) + MID$(WIN32SVER$, 3 , 2)
  173.  
  174.     DESTWIN$ = GetWindowsDir()
  175.     DESTSYS$ = GetWindowsSysDir()
  176.     DEST32S$ = DESTSYS + "WIN32S\"
  177.  
  178.  
  179.     OpenLogFile DESTWIN$+"PODW.LOG",0
  180.  
  181.     WinDrive$ = MID$(GetWindowsDir, 1, 1)
  182.     FREESPACE=GetFreeSpaceForDrive(WinDrive$)
  183.  
  184.     GetLocalHardDrivesList "LocalDriveList"
  185.     NumDrives%=GetListLength("LocalDriveList")
  186.     Counter%=1
  187.  
  188.  
  189.     WriteToLogFile "Local Drives List"
  190.  
  191. DriveLoop:
  192.     DestDrive$=GetListItem("LocalDriveList",Counter%)
  193.     Counter%=Counter%+1
  194.     WriteToLogFile DestDrive$+" :"+str$(GetFreeSpaceForDrive(DestDrive$))
  195.  
  196.     IF (Counter% < (NumDrives%+1)) THEN
  197.     GOTO DriveLoop
  198.     ENDIF
  199.  
  200.     NumDrives%=GetListLength("LocalDriveList")
  201.     WriteToLogFile "Local Drives ="+str$(NumDrives%)
  202.  
  203. IF (FREESPACE > (8192 *    1024)) THEN
  204.     '' Plenty of room
  205.     DestDrive$=WinDrive$
  206.     GOTO SpaceOK
  207. ENDIF
  208.  
  209. IF (FREESPACE < (4096 * 1024)) THEN
  210.     '' Not enough room for Win32s
  211.     sz$=UIStartDlg(CUIDLL$,TOOBIG1,"FInfo0DlgProc",0,"")
  212.     ExitCode%=EXITFAILURE
  213.     GOTO Quit
  214. ENDIF
  215.  
  216. IF (NumDrives% < 2) THEN
  217.     '' Not enough room for PhotoWorks
  218.     sz$=UIStartDlg(CUIDLL$,TOOBIG2,"FInfo0DlgProc",0,"")
  219.     ExitCode%=EXITFAILURE
  220.     GOTO Quit
  221. ENDIF
  222.  
  223.     Counter%=1
  224.  
  225. ScanLoop:
  226.     DestDrive$=GetListItem("LocalDriveList",Counter%)
  227.     Counter%=Counter%+1
  228.     IF ((DestDrive$ <> WinDrive$) AND (GetFreeSpaceForDrive(Drive$) > 5192 * 1024)) THEN
  229.     GOTO SpaceOK
  230.     ENDIF
  231.  
  232. IF (Counter% < (NumDrives%+1)) THEN
  233.     GOTO ScanLoop
  234. ENDIF
  235.  
  236.     sz$=UIStartDlg(CUIDLL$,TOOBIG2,"FInfo0DlgProc",0,"")
  237.     ExitCode%=EXITFAILURE
  238.     GOTO Quit
  239.  
  240. SpaceOK:
  241.  
  242.     SetBitmap CUIDLL$, LOGO
  243.  
  244.     SetTitle "Microsoft Win32s version " + MID$(GetSectionKeyVersion("WindowsSystem", "win32s16"), 1, 4) + " Setup Program"
  245.  
  246.     DESTSYS$ = GetWindowsSysDir()
  247.  
  248.     DEST32S$ = DESTSYS + "WIN32S\"
  249.  
  250.     DESTWIN$ = GetWindowsDir()
  251.  
  252.     WinDrive$ = MID$(GetWindowsDir, 1, 1)
  253.  
  254.     FREESPACE=GetFreeSpaceForDrive(WinDrive$)
  255.  
  256.     WriteToLogFile "PhotoWorks for Windows version v2.11f"
  257.     WriteToLogFile "Windows Directory:"+DESTWIN$
  258.     WriteToLogFile "System Directory: "+DESTSYS$
  259.     WriteToLogFile "Win32 Directory: "+DEST32S$
  260.  
  261.     WriteToLogFile ""
  262.     WriteToLogFile "Windows Version: "+STR$(GetWindowsMajorVersion)+"."+str$(GetWindowsMinorVersion)
  263.     WriteToLogFile "Windows Mode: "+STR$(GetWindowsMode)
  264.     WriteToLogFile "DOS Version: "+STR$(GetDOSMajorVersion)+"."+str$(GetDOSMinorVersion)
  265.  
  266.     WriteToLogFile "Windows Drive Free Space = "+str$(FREESPACE/1024)+" KB"
  267.  
  268. IF OnWindowsNT() THEN
  269.     GOTO SkipVerChk
  270. END IF
  271.  
  272.     IF (GetDOSMajorVersion < 6) THEN
  273.         sz$=UIStartDlg(CUIDLL$, DOSVersionWarn, "FInfo0DlgProc", 0, "")
  274.     UIPop 1
  275.     END IF
  276.  
  277. SkipVerChk:
  278.  
  279. '$IFDEF DEBUG
  280.     i% = SetSizeCheckMode(scmOnIgnore)    '' could use scmOff; def = scmOnFatal
  281.     WinDrive$ = MID$(GetWindowsDir, 1, 1)
  282.     IF IsDriveValid(WinDrive$) = 0 THEN
  283.         i% = DoMsgBox("Windows drive ('"+WinDrive$+"') is not a valid drive.", "DEBUG", MB_TASKMODAL+MB_ICONHAND+MB_OK)
  284.         GOTO QUIT
  285.     END IF
  286. '$ENDIF ''DEBUG
  287.  
  288. CHECK:
  289.     '' Can not run on versions less than 3.10.
  290.     IF GetWindowsMajorVersion < 3 THEN
  291.         ExitCode% = EXITFAILNOTWIN31
  292.         GOTO QUIT
  293.     END IF
  294.     IF GetWindowsMajorVersion = 3 AND GetWindowsMinorVersion < 10 THEN
  295.         ExitCode% = EXITFAILNOTWIN31
  296.         GOTO QUIT
  297.     END IF
  298.  
  299.  
  300.     BPP%=GetDisplayBPP
  301.     Rows%=GetDisplayRows
  302.     Cols%=GetDisplayCols
  303.     KMem=GetTotalPhysicalMemory
  304.  
  305.     WriteToLogFile ""
  306.     WriteToLogFile "Installed Ram = "+STR$(KMem)+"K"
  307.     WriteToLogFile "Color Depth = "+STR$(BPP%)+" Bits per pixel"
  308.     WriteToLogFile "Screen Width = "+STR$(Cols%)+" Columns"
  309.     WriteToLogFile "Screen Height = "+STR$(Rows%)+" Rows"
  310.  
  311.  IF (KMem < 3702) THEN
  312.  
  313.     sz$ = UIStartDlg(CUIDLL$, ERRORLOWMEM, "FInfoDlgProc", 0, "")
  314.     IF sz$ = "CONTINUE" THEN
  315.         UIPop 1
  316.     ELSE
  317.  
  318.     ExitCode%=EXITFAILURE
  319.     GOTO QUIT
  320.     END IF
  321.  
  322.  
  323.  
  324.     END IF
  325.  
  326.     IF ((BPP% < 8) AND (BPP% > 1)) THEN
  327.  
  328.     sz$ = UIStartDlg(CUIDLL$, LOCOLORRES, "FInfo0DlgProc", 0, "")
  329.     UIPop 1
  330.  
  331.     END IF
  332.  
  333.  
  334.     IF (BPP% = 1) THEN
  335.  
  336.     sz$ = UIStartDlg(CUIDLL$, MONOMODE, "FInfo0DlgProc", 0, "")
  337.     UIPop 1
  338.  
  339.     END IF
  340.   
  341.     '' Check that we are not running on Chicago, including pre-released
  342.     '' Chicago versions.
  343.  
  344. IF NOT OnWindowsNT() THEN
  345.     IF GetWindowsMajorVersion * 100 + GetWindowsMinorVersion > 350 THEN
  346.  
  347.     WriteToLogFile "Chicago or Win 95 installed."
  348.     OnWindows95%=1
  349.  
  350.       IF GetWindowsMajorVersion * 100 + GetWindowsMinorVersion < 395 THEN
  351.  
  352.     sz$ = UIStartDlg(CUIDLL$, WIN95, "FInfo0DlgProc", 0, "")
  353.         UIPop 1
  354.  
  355.       END IF
  356.     ExitCode% = EXITSUCCESS
  357.         WIN32ENABLED% = 1
  358.         GOTO FREECELL
  359.     END IF
  360. END IF
  361.  
  362.     IF GetWindowsMode < 2  THEN
  363.         IF OnWindowsNT() THEN
  364.         WriteToLogFile "Non-Intel (RISC) processor found; Win32s was not installed."
  365.             ExitCode% = EXITFAILNOTINTEL '' Running on Windows NT (on RISC)
  366.         ELSE
  367.             ExitCode% = EXITFAILNOTENH   '' Standard Mode Windows
  368.         END IF
  369.         GOTO QUIT
  370.     END IF
  371.  
  372.     IF OnWindowsNT() THEN
  373.         ExitCode% = EXITSUCCESS
  374.         WIN32ENABLED% = 1
  375.     WriteToLogFile "Windows NT was found; Win32s was not installed."
  376.         GOTO FREECELL
  377.     END IF
  378.     ExitCode% = EXITSUCCESS
  379.  
  380.     if IsRunningApp() <> 0 THEN
  381.     WriteToLogFile "Win32s App Running"
  382.         ExitCode% = EXITFAILRUNAPP
  383.         GOTO QUIT
  384.     END IF
  385.  
  386.     '' Get version of Win32s to be installed from version info in INF file
  387.     szNewVer$ = GetSectionKeyVersion("WindowsSystem", "win32s16")
  388.  
  389.     '' See if OLE is included.
  390.  
  391.     OLEINCLUDED% = DoesFileExist( GetSymbolValue("STF_SRCDIR") + "OLE2THK.DL_", femExists )
  392.  
  393.     IF OLEINCLUDED% = 1 THEN
  394.         '' See whether one of the OLE 16 bit components is loaded.
  395.         IF GetModulehandle("compobj") <> 0 THEN
  396.             OLE16RUNAPP% = 1
  397.             GOTO GetOleVersion
  398.         END IF
  399.         IF GetModuleHandle("ole2") <> 0 THEN
  400.             OLE16RUNAPP% = 1
  401.             GOTO GetOleVersion
  402.         END IF
  403.         IF GetModuleHandle("ole2prox") <> 0 THEN
  404.             OLE16RUNAPP% = 1
  405.             GOTO GetOleVersion
  406.         END IF
  407.         IF GetModuleHandle("ole2conv") <> 0 THEN
  408.             OLE16RUNAPP% = 1
  409.             GOTO GetOleVersion
  410.         END IF
  411.         IF GetModuleHandle("storage") <> 0 THEN
  412.             OLE16RUNAPP% = 1
  413.             GOTO GetOleVersion
  414.         END IF
  415.         IF GetModuleHandle("ole2nls") <> 0 THEN
  416.             OLE16RUNAPP% = 1
  417.             GOTO GetOleVersion
  418.         END IF
  419.         IF GetModuleHandle("ole2disp") <> 0 THEN
  420.             OLE16RUNAPP% = 1
  421.             GOTO GetOleVersion
  422.         END IF
  423.         IF GetModuleHandle("typelib") <> 0 THEN
  424.             OLE16RUNAPP% = 1
  425.             GOTO GetOleVersion
  426.         END IF
  427.  
  428. GetOleVersion:
  429.         szOleNewVer$ = GetSectionKeyVersion("OleWindowsSystemWin32s", "ole2thk")
  430.  
  431.         '' Get version of currently installed OLE32 from version info of
  432.         '' ole2thk file
  433.         szOleOldVer$ = GetVersionOfFile( DESTSYS$ + "WIN32S\OLE2THK.DLL" )
  434.  
  435.         szOle16OldVer$ = GetVersionOfFile( DESTSYS$ + "COMPOBJ.DLL" )
  436.         szOle16NewVer$ = GetSectionKeyVersion("OleWindowsSystem", "compobj")
  437.         IF (szOle16NewVer$ > szOle16OldVer$) THEN
  438.             OLE2_16% = 1
  439.         END IF
  440.  
  441.         szOle16OldVer$ = GetVersionOfFile( DESTSYS$ + "OLE2.DLL" )
  442.         szOle16NewVer$ = GetSectionKeyVersion("OleWindowsSystem", "ole2")
  443.         IF (szOle16NewVer$ > szOle16OldVer$) THEN
  444.             OLE2_16% = 1
  445.         END IF
  446.  
  447.         szOle16OldVer$ = GetVersionOfFile( DESTSYS$ + "OLE2PROX.DLL" )
  448.         szOle16NewVer$ = GetSectionKeyVersion("OleWindowsSystem", "ole2prox")
  449.         IF (szOle16NewVer$ > szOle16OldVer$) THEN
  450.             OLE2_16% = 1
  451.         END IF
  452.  
  453.         szOle16OldVer$ = GetVersionOfFile( DESTSYS$ + "STORAGE.DLL" )
  454.         szOle16NewVer$ = GetSectionKeyVersion("OleWindowsSystem", "storage")
  455.         IF (szOle16NewVer$ > szOle16OldVer$) THEN
  456.             OLE2_16% = 1
  457.         END IF
  458.  
  459.         szOle16OldVer$ = GetVersionOfFile( DESTSYS$ + "OLE2CONV.DLL" )
  460.         szOle16NewVer$ = GetSectionKeyVersion("OleWindowsSystem", "ole2conv")
  461.         IF (szOle16NewVer$ > szOle16OldVer$) THEN
  462.             OLE2_16% = 1
  463.         END IF
  464.  
  465.         szOle16OldVer$ = GetVersionOfFile( DESTSYS$ + "OLE2NLS.DLL" )
  466.         szOle16NewVer$ = GetSectionKeyVersion("OleWindowsSystem", "ole2nls")
  467.         IF (szOle16NewVer$ > szOle16OldVer$) THEN
  468.             OLE2AUTO_16% = 1
  469.         END IF
  470.  
  471.         szOle16OldVer$ = GetVersionOfFile( DESTSYS$ + "OLE2DISP.DLL" )
  472.         szOle16NewVer$ = GetSectionKeyVersion("OleWindowsSystem", "ole2disp")
  473.         IF (szOle16NewVer$ > szOle16OldVer$) THEN
  474.             OLE2AUTO_16% = 1
  475.         END IF
  476.  
  477.         szOle16OldVer$ = GetVersionOfFile( DESTSYS$ + "TYPELIB.DLL" )
  478.         szOle16NewVer$ = GetSectionKeyVersion("OleWindowsSystem", "typelib")
  479.         IF (szOle16NewVer$ > szOle16OldVer$) THEN
  480.             OLE2AUTO_16% = 1
  481.         END IF
  482.  
  483.     END IF
  484.  
  485.     OLE2_32% = OLEINCLUDED%
  486.  
  487.     '' Check if Win32s is partially installed
  488.     sz$ = GetIniKeyString (DESTSYS$ + "WIN32S.INI", "Win32s", "Setup")
  489.     '' If WIN32S.INI specifies Win32s Setup=0, then force complete Win32s file overwrite
  490.     IF sz$ = "0" THEN
  491.         GOTO WELCOME
  492.     END IF
  493.     '' If WIN32S.INI is missing, try and reinstall Win32s files/recreate WIN32S.INI
  494.     IF sz$ <> "1" THEN
  495.         GOTO WELCOME
  496.     END IF
  497.  
  498.     '' If Win32s is already installed, get running version number
  499.     i% = DoesFileExist( DESTSYS$ + "W32SYS.DLL", femExists )
  500.     IF i% = 1 THEN
  501.         i% = IsWin32sLoaded( szOldVer$ )
  502.     ENDIF
  503.  
  504.     IF i% = 0 THEN
  505.         GOTO WELCOME
  506.     END IF
  507.  
  508.     IF szNewVer$ > szOldVer$ THEN
  509.         GOTO WELCOME
  510.     END IF
  511.  
  512.     IF OLEINCLUDED% = 1 THEN
  513.  
  514.         OLE2_32% = 0
  515.  
  516.         IF (szNewVer$ = szOldVer$) OR (szNewVer$ < szOldVer$) THEN
  517.             '' Compare OLE32 version and versions of each of OLE16 libraries.
  518.             sz$ = GetIniKeyString (DESTSYS$ + "WIN32S.INI", "OLE", "Setup")
  519.             '' If WIN32S.INI specifies OLE2 Setup=0, then force OLE2 file overwrite
  520.             IF ((sz$ <> "1") OR (szOleNewVer$ > szOleOldVer$)) THEN
  521.                 OLEONLY% = 1
  522.                 OLE2_32% = 1
  523.                 GOTO WELCOME
  524.             END IF
  525.  
  526.             IF OLE2_16% OR OLE2AUTO_16 THEN
  527.                 OLEONLY% = 1
  528.                 GOTO WELCOME
  529.             END IF
  530.  
  531.         END IF
  532.  
  533.     END IF
  534.  
  535.     WIN32ENABLED% = 1
  536.     GOTO FREECELL
  537.  
  538. WELCOME:
  539.     i% = SetCuiFlags(OLEONLY%, OLE16RUNAPP%)
  540.  
  541.  
  542. IF OnWindowsNT() THEN
  543.     sz$ = UIStartDlg(CUIDLL$, WELCOMENT, "FInfoDlgProc", HELPWELCOME, HELPPROC$)
  544.     GOTO WELCOMEDONE
  545. ENDIF
  546.  
  547. IF GetWindowsMajorVersion * 100 + GetWindowsMinorVersion > 350 THEN
  548.     sz$ = UIStartDlg(CUIDLL$, WELCOME95, "FInfoDlgProc", HELPWELCOME, HELPPROC$)
  549.     GOTO WELCOMEDONE
  550. ENDIF
  551.  
  552.     sz$ = UIStartDlg(CUIDLL$, WELCOME16, "FInfoDlgProc", HELPWELCOME, HELPPROC$)
  553.  
  554. WELCOMEDONE:
  555.     
  556.     IF sz$ = "CONTINUE" THEN
  557.         UIPop 1
  558.     ELSE
  559.         UIPop 1
  560.         GOSUB ASKQUIT
  561.         GOTO WELCOME
  562.     END IF
  563.  
  564. GETWIN32SPATH:
  565.     IF PagingEnabled() = 0 THEN
  566.         i% = DoMsgBox("Use the Control Panel 386 Enhanced icon and configure Windows using the Virtual Memory option.", "Win32s requires Virtual Memory", MB_TASKMODAL+MB_ICONHAND+MB_OK)
  567.         ExitCode% = EXITFAILURE '' Enhanced mode but not paging
  568.         GOTO QUIT
  569.     END IF
  570.  
  571.     IF ShareEnabled() <> 0 THEN
  572.     SHARE% = 0
  573.     GOTO SHAREOK
  574.     END IF
  575.  
  576.     sz$=UIStartDlg(CUIDLL$, ADDSHARE, "FInfoDlgProc", HELPSHARE, HELPPROC$)
  577.  
  578.     IF sz$ = "EXIT" THEN
  579.     ExitCode% = EXITFAILURE
  580.     GOTO QUIT    '' Bail out
  581.     ELSEIF sz$="CONTINUE" THEN
  582.     SHARE%=2    '' We'll edit AUTOEXEC.BAT later in this script.
  583.     ELSE
  584.     SHARE%=1    '' We'll create an example AUTOEXEC.W32
  585.     END IF
  586.  
  587.     UIPop 1
  588.  
  589.  
  590. SHAREOK:
  591.  
  592.  
  593.     SetSymbolValue "EditTextIn", DESTSYS$
  594.     SetSymbolValue "EditFocus", "END"
  595.  
  596. GETPATHL1:
  597.     sz$ = UIStartDlg(CUIDLL$, VERPATH, "FDispDlgProc", HELPWELCOME, HELPPROC$)
  598.  
  599.     IF sz$ = "CONTINUE" THEN
  600.         IF IsDirWritable(DESTSYS$) = 0 THEN
  601.             GOSUB BADPATH
  602.             GOTO GETPATHL1
  603.         END IF
  604.         UIPop 1
  605.     ELSEIF sz$ = "REACTIVATE" THEN
  606.         UIPop 1
  607.         GOTO GETPATHL1
  608.     ELSEIF sz$ = "BACK" THEN
  609.         UIPop 1
  610.         GOTO WELCOME
  611.     ELSE
  612.         UIPop 1
  613.         GOSUB ASKQUIT
  614.         GOTO GETPATHL1
  615.     END IF
  616.  
  617. COPYFILES:
  618.     IF OLEONLY% = 0 THEN
  619.         CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "Win32s", "Setup", "0", cmoOverwrite
  620.     END IF
  621.     IF OLE2_32% = 1 THEN
  622.         CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "OLE", "Setup", "0", cmoOverwrite
  623.     END IF
  624.  
  625.     '' Indicate Win32s install failure until all files known to be copied.
  626.     ExitCode% = EXITFAILURE
  627.     ERR = 0
  628.     CreateDir DEST32S$, cmoNone
  629.     Install OLEONLY%, OLE2_32%, OLE2_16%, OLE2AUTO_16%, OLE16RUNAPP%
  630.     UpdateSystemIni
  631.     '' Terminate if unhandled fatal error
  632.     IF ERR <> 0 THEN
  633.     GOTO QUIT
  634.     END IF
  635.  
  636.     IF OLEONLY% = 0 THEN
  637.         CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "Win32s", "Setup", "1", cmoOverwrite
  638.         CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "Win32s", "Version", szNewVer$, cmoOverwrite
  639.         CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "Nls", "AnsiCP", "1252", cmoOverwrite
  640.     END IF
  641.     IF OLE2_32% = 1 THEN
  642.         CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "OLE", "Setup", "1", cmoOverwrite
  643.         CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "OLE", "Version", szOleNewVer, cmoOverwrite
  644.     END IF
  645.  
  646.     i% = DoMsgBox("Win32s files successfully installed.", "Microsoft Win32s Setup", MB_OK+MB_TASKMODAL)
  647.     '' Indicate Win32s correctly copied and installed.
  648.     ExitCode% = EXITSUCCESS
  649.  
  650. FREECELL:
  651.  
  652.     SetTitle "Seattle FilmWorks PhotoWorks Setup"
  653.  
  654.     IF OLEONLY% = 1 THEN
  655.         GOTO QUIT
  656.     ENDIF
  657.  
  658. ''    IF WIN32ENABLED% = 1 THEN
  659. ''        sz$ = UIStartDlg(CUIDLL$, FREECELLINSTNOWIN32S, "FInfoDlgProc",0, "")
  660. ''    UIPop 1
  661. ''    ELSE
  662. ''        sz$ = UIStartDlg(CUIDLL$, FREECELLINST, "FInfoDlgProc",0, "")
  663. ''    UIPop 1
  664. ''    END IF
  665. ''    IF sz$ <> "CONTINUE" THEN
  666. ''        GOTO QUIT
  667. ''    END IF
  668.  
  669. GETFREEPATH:
  670.  
  671.  
  672. IF OnWindows95% = 1 THEN
  673.  
  674.     DESTFREE$ =  DestDrive$ + ":\WIN32APP\FREECELL\"
  675.     DESTPODW$ =  DestDrive$ + ":\PHOTOWKS\"
  676.     OnWin32s% =  0
  677.  
  678.     ELSEIF OnWindowsNT() THEN
  679.  
  680.     DESTFREE$ =  DestDrive$ + ":\WIN32APP\FREECELL\"
  681.     DESTPODW$ =  DestDrive$ + ":\PHOTOWKS\"
  682.     OnWin32s% =  0
  683.     
  684.     ELSE
  685.  
  686.     DESTFREE$ =  DestDrive$ + ":\WIN32APP\FREECELL\"
  687.     DESTPODW$ =  DestDrive$ + ":\PHOTOWKS\"
  688.     OnWin32s% =  1
  689.  
  690.  
  691.     HPDRVRNAME$=FindFileInTree("DESKJETC.DRV",DESTWIN$)
  692.  
  693.     IF HPDRVRNAME$="" THEN
  694.         GOTO NODESKJET
  695.     ENDIF
  696.  
  697.     HPDRVRVERSION$=GetVersionOfFile(HPDRVRNAME$)
  698.         WriteToLogFile HPDRVRNAME$+" = v"+HPDRVRVERSION$
  699.  
  700.     IF (HPDRVRVERSION$ < "6.1.0.4") THEN
  701.         sz$=UIStartDlg(CUIDLL$, HPVersionWarn, "FInfo0DlgProc", 0, "")
  702.     UIPop 1
  703.     END IF
  704.     
  705. NODESKJET:
  706.  
  707. ENDIF
  708.  
  709.     SetSymbolValue "EditTextIn", DESTPODW$
  710.     SetSymbolValue "EditFocus", "END"
  711.  
  712. GETFREEPATHL1:
  713.     sz$ = UIStartDlg(CUIDLL$, FREECELLPATH, "FEditDlgProc", HELPFREEPATH, HELPPROC$)
  714.  
  715.     IF sz$ = "CONTINUE" THEN
  716.         DESTPODW$ = GetSymbolValue("EditTextOut")
  717.  
  718.         IF MID$(DESTPODW$, LEN(DESTPODW$), 1) <> "\" THEN
  719.             DESTPODW$ = DESTPODW$ + "\"
  720.         END IF
  721.         ''Validate new path.
  722.         IF IsDirWritable(DESTPODW$) = 0 THEN
  723.             GOSUB BADPATH
  724.             GOTO GETFREEPATHL1
  725.         END IF
  726.         UIPop 1
  727.  
  728.         GOTO GETDNLDPATH
  729.     ELSEIF sz$ = "REACTIVATE" THEN
  730.         GOTO GETFREEPATHL1
  731.     ELSEIF sz$ = "EXIT" THEN
  732.         UIPop 1
  733.         GOTO QUIT
  734.     END IF
  735.  
  736. GETDNLDPATH:
  737.  
  738.     DESTDNLD$=DESTPODW$+"DOWNLOAD"
  739.     SetSymbolValue "EditTextIn", DESTDNLD$
  740.     SetSymbolValue "EditFocus", "END"
  741.  
  742. GETDNLDPATHL1:
  743.     sz$ = UIStartDlg(CUIDLL$, DOWNLOADPATH, "FEditDlgProc", HELPDOWNLOAD, HELPPROC$)
  744.  
  745.     IF sz$ = "CONTINUE" THEN
  746.         DESTDNLD$ = GetSymbolValue("EditTextOut")
  747.  
  748.         IF MID$(DESTDNLD$, LEN(DESTDNLD$), 1) <> "\" THEN
  749.             DESTDNLD$ = DESTDNLD$ + "\"
  750.         END IF
  751.         ''Validate new path.
  752.         IF IsDirWritable(DESTDNLD$) = 0 THEN
  753.             GOSUB BADPATH
  754.             GOTO GETDNLDPATHL1
  755.         END IF
  756.         UIPop 1
  757.  
  758.         GOTO COPYFREECELL
  759.     ELSEIF sz$ = "REACTIVATE" THEN
  760.         GOTO GETDNLDPATHL1
  761.     ELSEIF sz$ = "EXIT" THEN
  762.         UIPop 1
  763.         GOTO QUIT
  764.     END IF
  765.  
  766. COPYFREECELL:
  767.     ClearCopyList
  768.     CreateDir DESTFREE$, cmoNone
  769.  
  770.     SrcDir$ = GetSymbolValue("STF_SRCDIR")
  771.  
  772.     DESTIMG$=DESTPODW$+"IMAGES"
  773.     DESTSAMP$=DESTIMG$+"\SAMPLES"
  774.     DESTALB$=DESTPODW$+"ALBUMS"
  775.     DESTUTIL$=DESTPODW+"UTILS"
  776.  
  777.     CreateDir DESTPODW$, cmoNone
  778.     CreateDir DESTDNLD$, cmoNone
  779. ''    CreateDir DESTUTIL$, cmoNone
  780.     CreateDir DESTIMG$, cmoNone
  781.     CreateDir DESTALB$, cmoNone
  782.     CreateDir DESTSAMP$, cmoNone
  783.  
  784.     PODWDrive$=MID$(DESTPODW$,1,1)
  785.     FREESPACE=GetFreeSpaceForDrive(PODWDrive$)
  786.  
  787.     WriteToLogFile "PODW Destination: "+DESTPODW$
  788.     WriteToLogFile "Album Destination: "+DESTALB$
  789.     WriteToLogFile "Image Destination: "+DESTIMG$
  790.     WriteToLogFile "Sample Destination: "+DESTSAMP$
  791.     WriteToLogFile "Utilities Destination: "+DESTUTIL$
  792.     WriteToLogFile "PODW Drive Free Space = "+str$(FREESPACE/1024)+"KB"
  793.  
  794.     ERR = 0
  795.  
  796. IF OnWin32s%=1 THEN
  797.     AddSectionFilesToCopyList "Freecell", SrcDir$, DESTFREE$
  798. ENDIF
  799.  
  800.     AddSectionFilesToCopyList "PODW", SrcDir$, DESTPODW$
  801. ''    AddSectionFilesToCopyList "HELP", SrcDir$, DESTPODW$
  802. ''    AddSectionFilesToCopyList "SSaver", SrcDir$, DESTPODW$
  803.     AddSectionFilesToCopyList "Images", SrcDir$, DESTSAMP$+"\"
  804.     AddSectionFilesToCopyList "Albums", SrcDir$, DESTALB$+"\"
  805.     AddSectionFilesToCopyList "Init", SrcDir$, DESTWIN$
  806. ''    AddSectionFilesToCopyList "TAC", SrcDir$, DESTUTIL$+"\"
  807.  
  808.     CopyFilesInCopyList
  809.     '' If error copying FreeCell, not a fatal error. Win32s is already installed.
  810.     IF ERR <> 0 THEN
  811.     ERR = 0
  812.     GOTO QUIT
  813.     END IF
  814.     ERR = 0
  815.  
  816.     IF DoesFileExist( DESTSYS$ + "WIN32S.INI", femExists ) THEN
  817.     CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "Freecell", "Setup", "1", cmoOverwrite
  818.     CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "Freecell", "Version", szNewVer$, cmoOverwrite
  819.     END IF
  820.  
  821.     ERR = 0
  822.  
  823.  
  824.     FILE1$=DESTALB$+"\"+GetSectionKeyFilename("Albums","File1")
  825.     FILE2$=DESTALB$+"\"+GetSectionKeyFilename("Albums","File2")
  826.     FILE3$=DESTSAMP$+"\"+GetSectionKeyFilename("Images","File3")
  827.     FILE4$=DESTSAMP$+"\"+GetSectionKeyFilename("Images","File4")
  828.     FILE5$=DESTSAMP$+"\"+GetSectionKeyFilename("Images","File5")
  829. ''    FILE6$=DESTSAMP$+"\"+GetSectionKeyFilename("Images","File6")
  830. ''    FILE7$=DESTSAMP$+"\"+GetSectionKeyFilename("Images","File7")
  831. ''    FILE8$=DESTSAMP$+"\"+GetSectionKeyFilename("Images","File8")
  832.  
  833.     ALBUM1Old$="C:\PHOTOPLS\ALBUMS\"+GetSectionKeyFilename("Albums","File1")
  834.     ALBUM1New$=DESTALB$+"\"+GetSectionKeyFilename("Albums","File1")
  835.     ALBUM2Old$="C:\PHOTOPLS\ALBUMS\"+GetSectionKeyFilename("Albums","File2")
  836.     ALBUM2New$=DESTALB$+"\"+GetSectionKeyFilename("Albums","File2")
  837.  
  838. IF DoesFileExist( DESTWIN$+"WIN.INI", femExists ) THEN
  839.  
  840.     IF DoesIniKeyExist (DESTWIN$+"WIN.INI","Extensions","PWP") THEN
  841.  
  842.     ELSE
  843.     CreateIniKeyValue DESTWIN$+"WIN.INI","Extensions","PWP",DESTPODW$+"PODW.EXE",cmoOverwrite
  844.     EndIf
  845.     
  846.     IF DoesIniKeyExist (DESTWIN$+"WIN.INI","Extensions","SFW") THEN
  847.  
  848.     ELSE
  849.     CreateIniKeyValue DESTWIN$+"WIN.INI","Extensions","SFW",DESTPODW$+"PODW.EXE",cmoOverwrite
  850.     EndIf
  851.     
  852.     IF DoesIniKeyExist (DESTWIN$+"WIN.INI","Extensions","ALB") THEN
  853.  
  854.     ELSE
  855.     CreateIniKeyValue DESTWIN$+"WIN.INI","Extensions","ALB",DESTPODW$+"PODW.EXE",cmoOverwrite
  856.     EndIf
  857.  
  858. EndIf
  859.     
  860.  
  861. IF DoesFileExist( DESTWIN$+"PODW.INI", femExists ) THEN
  862.  
  863.     CreateIniKeyValue DESTWIN$+"PODW.INI","PODW","Version","2.11",cmoOverwrite
  864.     CreateIniKeyValue DESTWIN$+"PODW.INI","PODW","Release","Free",cmoOverwrite
  865.     CreateIniKeyValue DESTWIN$+"PODW.INI","PODW","Language","English",cmoOverwrite
  866.     CreateIniKeyValue DESTWIN$+"PODW.INI","PODW","New","1",cmoOverwrite
  867.  
  868.     CreateIniKeyValue DESTWIN$+"PODW.INI","Directory","Albums",DESTALB$,cmoOverwrite
  869.     CreateIniKeyValue DESTWIN$+"PODW.INI","Directory","Images",DESTIMG$,cmoOverwrite
  870.     CreateIniKeyValue DESTWIN$+"PODW.INI","PhotoMail","Download Directory",DESTPODW$+"DOWNLOAD",cmoOverwrite
  871.  
  872.     CreateIniKeyValue DESTWIN$+"PODW.INI","Recent File List","File1",FILE1$,cmoOverwrite
  873.     CreateIniKeyValue DESTWIN$+"PODW.INI","Recent File List","File2",FILE2$,cmoOverwrite
  874.     CreateIniKeyValue DESTWIN$+"PODW.INI","Recent File List","File3",FILE3$,cmoOverwrite
  875.     CreateIniKeyValue DESTWIN$+"PODW.INI","Recent File List","File4",FILE4$,cmoOverwrite
  876.     CreateIniKeyValue DESTWIN$+"PODW.INI","Recent File List","File5",FILE5$,cmoOverwrite
  877. ''    CreateIniKeyValue DESTWIN$+"PODW.INI","Recent File List","File6",FILE6$,cmoOverwrite
  878.  
  879.     IF (KMem > 7800) THEN
  880.     CreateIniKeyValue DESTWIN$+"PODW.INI","Undo Redo","Buffer","1",cmoOverwrite
  881.     ELSE
  882.         CreateIniKeyValue DESTWIN$+"PODW.INI","Undo Redo","Buffer","0",cmoOverwrite
  883.     END IF
  884.  
  885. END IF
  886.  
  887.     CreateIniKeyValue DESTWIN$+"PODW.INI","Modify Album Path","Count","2",cmoOverwrite
  888.     CreateIniKeyValue DESTWIN$+"PODW.INI","Modify Album Path","Alb0",ALBUM1Old$+","+ALBUM1New$,cmoOverwrite
  889.     CreateIniKeyValue DESTWIN$+"PODW.INI","Modify Album Path","Alb1",ALBUM2Old$+","+ALBUM2New$,cmoOverwrite
  890.  
  891. SkipNew:
  892.  
  893. PageOver$=GetIniKeyString(DESTWIN$+"SYSTEM.INI","386Enh","PageOverCommit")
  894.  
  895. IF (PageOver$="") THEN
  896.     Mem1%=0
  897.  
  898.    ELSE
  899.    Mem1%=val(PageOver$)
  900.  
  901. END IF
  902.  
  903. IF (Mem1% > 5) THEN
  904.    GOTO SkipMem
  905.  
  906. END IF
  907.  
  908.  
  909. IF (KMem > 6000)  THEN
  910.  
  911.          Mem%=4
  912. ELSE
  913.  
  914.     Mem%=6
  915. END IF
  916.  
  917. IF (Mem% < Mem1%) THEN
  918.  
  919.     Mem%=Mem1%
  920.  
  921. ENDIF
  922.  
  923. PageOver$=MID$(STR$(Mem%),2,LEN(STR$(Mem%))-1)
  924.  
  925. CreateIniKeyValue DESTWIN$+"SYSTEM.INI","386Enh","PageOverCommit",PageOver$+"   ; Modified by PhotoWorks",cmoOverwrite
  926.  
  927. SkipMem:
  928.  
  929.  
  930. ''    CreateIniKeyValue DESTWIN$+"CONTROL.INI","Screen Saver.PhotoWorks","Podw",DESTPODW$+"PODW.EXE",cmoOverwrite
  931. ''    CreateIniKeyValue DESTWIN$+"CONTROL.INI","Screen Saver.PhotoWorks","Album",DESTALB$+"\"+"SSaver.alb",cmoOverwrite
  932. ''    CreateIniKeyValue DESTWIN$+"CONTROL.INI","Screen Saver.PhotoWorks","PWProtected","0",cmoOverwrite
  933. ''    CreateIniKeyValue DESTWIN$+"CONTROL.INI","Screen Saver.PhotoWorks","Titles","1",cmoOverwrite
  934. ''    CreateIniKeyValue DESTWIN$+"CONTROL.INI","Screen Saver.PhotoWorks","Index","1",cmoOverwrite
  935. ''    CreateIniKeyValue DESTWIN$+"CONTROL.INI","Screen Saver.PhotoWorks","Shuffle","1",cmoOverwrite
  936. ''    CreateIniKeyValue DESTWIN$+"CONTROL.INI","Screen Saver.PhotoWorks","XPodwWarning","1",cmoOverwrite
  937.  
  938. ''    CopyFile DESTPODW$+"SSPODW.EXE",DESTWIN$+"SSPODW.SCR",cmoOverwrite,0
  939.  
  940.     '' If error copying PhotoPlus, not a fatal error. Win32s is already installed.
  941.     IF ERR <> 0 THEN
  942.     ERR = 0
  943.     GOTO QUIT
  944.     END IF
  945.     ERR = 0
  946.  
  947.  
  948.     IF DoesFileExist( DESTSYS$ + "WIN32S.INI", femExists ) THEN
  949.     CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "Freecell", "Setup", "1", cmoOverwrite
  950.     CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "Freecell", "Version", szNewVer$, cmoOverwrite
  951.     CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "PhotoWorks", "Setup", "1", cmoOverwrite
  952.     CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "PhotoWorks", "Version", "v2.11f", cmoOverwrite
  953.     END IF
  954.  
  955.     ERR = 0
  956.  
  957.  
  958. ''    i=FRemoveProgmanGroup ("PhotoWorks v2.11f", cmoNone)
  959.     CreateProgmanGroup "PhotoWorks v2.11f", "", cmoNone
  960.     ShowProgmanGroup   "PhotoWorks v2.11f", 1, cmoNone
  961.  
  962.  
  963.     CreateProgmanItem  "PhotoWorks v2.11f", "PhotoWorks", DESTPODW$ + "PODW.EXE", "", cmoOverwrite
  964.     CreateProgmanItem  "PhotoWorks v2.11f", "PhotoWorks Help", "WINHELP.EXE "+DESTPODW$+"PODW.HLP","", cmoOverwrite
  965. ''    CreateProgmanItem  "PhotoWorks v2.11f", "Freecell", DESTFREE$ + "FREECELL.EXE", "", cmoOverwrite
  966.  
  967.  
  968. ''    CreateProgmanItem  "PhotoWorks v2.11f", "Screen Saver", DESTPODW$ + "SSPODW.EXE /s",DESTPODW$ + "SSPODW.EXE,0", cmoOverwrite
  969. ''    CreateProgmanItem  "PhotoWorks v2.11f", "Screen Saver Setup", DESTPODW$ + "SSPODW.EXE /c", DESTPODW$ + "SSPODW.EXE,1", cmoOverwrite
  970.     
  971.     
  972.     IF DoesFileExist(DESTWIN$+"NOTEPAD.EXE",femExists) THEN
  973.  
  974.     CreateProgmanItem  "PhotoWorks v2.11f", "Readme.Txt", "NOTEPAD.EXE "+DESTPODW$ + "README.TXT","", cmoOverWrite
  975.     CreateProgmanItem  "PhotoWorks v2.11f", "Podw.Log", "NOTEPAD.EXE "+DESTWIN$ + "PODW.LOG","", cmoOverWrite
  976.  
  977.     END IF
  978.  
  979.     '' Only put up success dialog if icon added to group
  980.     IF ERR = 0 THEN
  981.     i% = DoMsgBox("PhotoWorks was sucessfully installed.", "PhotoWorks 2.11f Setup", MB_OK+MB_TASKMODAL)
  982.     END IF
  983.     ERR = 0
  984.  
  985. QUIT:
  986.     '' Install error handler for final message box routines
  987.     ON ERROR GOTO ERRQUIT
  988.     IF ERR = 0 THEN
  989.         dlg% = ExitCode%
  990.     ELSEIF ERR = STFQUIT THEN
  991.         IF (OLE_PROTECT% = 1) THEN
  992.             '' Free all previously loaded libraries
  993.             FreeLibrary GetModuleHandle("compobj")
  994.             FreeLibrary GetModuleHandle("ole2")
  995.             FreeLibrary GetModuleHandle("ole2prox")
  996.             FreeLibrary GetModuleHandle("ole2conv")
  997.             FreeLibrary GetModuleHandle("storage")
  998.             FreeLibrary GetModuleHandle("ole2nls")
  999.             FreeLibrary GetModuleHandle("ole2disp")
  1000.             FreeLibrary GetModuleHandle("typelib")
  1001.         END IF
  1002.         dlg% = EXITQUIT
  1003.         ExitCode% = EXITQUIT
  1004.     ELSE
  1005.         dlg% = EXITFAILURE
  1006.         ExitCode% = EXITQUIT
  1007.     END IF
  1008.  
  1009. QUITL1:
  1010.     IF WIN32ENABLED% = 1 THEN
  1011.         UIPop 1
  1012.         END
  1013.     END IF
  1014.  
  1015.     sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfo0DlgProc", 0, "")
  1016.     IF sz$ = "REACTIVATE" THEN
  1017.         GOTO QUITL1
  1018.     END IF
  1019.     UIPop 1
  1020.  
  1021.     IF ExitCode% = EXITSUCCESS THEN
  1022.         IF RebootSystem(OLEONLY% and not OLE_OLEBOOT%) = 0 THEN
  1023.             CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "Win32s", "Setup", "0", cmoOverwrite
  1024.             IF OLE2_32% = 1 THEN
  1025.                 CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "OLE", "Setup", "0", cmoOverwrite
  1026.             END IF
  1027.             i% = DoMsgBox("Win32s is not properly configured and Win32s Setup must be run again.", "Unable to Restart Windows", MB_ICONEXCLAMATION+MB_OK+MB_TASKMODAL)
  1028.         END IF
  1029.     ENDIF
  1030.  
  1031.     END
  1032.  
  1033. '' Fatal error handler for error message routine
  1034. ERRQUIT:
  1035.     i% = DoMsgBox("Setup sources were corrupted!", "Setup Message", MB_OK+MB_TASKMODAL+MB_ICONHAND)
  1036.     END
  1037.  
  1038. '' Bypass run-time errors. Let final dialog box display fatal error message.
  1039. ERRNORMAL:
  1040.     '' Check if user cancelled setup
  1041.     IF ERR = STFQUIT THEN
  1042.     GOTO QUIT
  1043.     END IF
  1044.     RESUME NEXT
  1045.  
  1046.  
  1047. BADPATH:
  1048.     sz$ = UIStartDlg(CUIDLL$, BADPATH, "FInfo0DlgProc", 0, "")
  1049.     IF sz$ = "REACTIVATE" THEN
  1050.         GOTO BADPATH
  1051.     END IF
  1052.         UIPop 1
  1053.     RETURN
  1054.  
  1055.   ASKQUIT:
  1056.     sz$ = UIStartDlg(CUIDLL$, ASKQUIT, "FQuitDlgProc", 0, "")
  1057.  
  1058.     IF sz$ = "EXIT" THEN
  1059.         UIPop 1
  1060.         UIPopAll
  1061.         ERROR STFQUIT
  1062.     ELSEIF sz$ = "REACTIVATE" THEN
  1063.         GOTO ASKQUIT
  1064.     ELSE
  1065.         UIPop 1
  1066.     END IF
  1067.     RETURN
  1068.  
  1069.  
  1070.  
  1071. '**
  1072. '** Purpose:
  1073. '**     Builds the copy list and performs all installation operations.
  1074. '** Arguments:
  1075. '**     none.
  1076. '** Returns:
  1077. '**     none.
  1078. '*************************************************************************
  1079. SUB Install(OLEONLY%, OLE2_32%, OLE2_16%, OLE2AUTO_16%, OLE16RUNAPP%) STATIC
  1080.  
  1081.     SrcDir$ = GetSymbolValue("STF_SRCDIR")
  1082.  
  1083.     '' Use file layout sections that specify OLDER file version/time check
  1084.     IF OLEONLY% = 0 THEN
  1085.         AddSectionFilesToCopyList "WindowsSystem", SrcDir$, DESTSYS$
  1086.         AddSectionFilesToCopyList "WindowsSystemWin32s", SrcDir$, DESTSYS$ + "WIN32S\"
  1087.         '' Add obsolete files to be removed
  1088.         AddSectionFilesToCopyList "Win32sSystemObsoleteFiles", SrcDir$, DESTSYS$ + "WIN32S\"
  1089.     END IF
  1090.  
  1091.     OLE_PROTECT% = 0
  1092.     OLEINCLUDED% = DoesFileExist( GetSymbolValue("STF_SRCDIR") + "OLE2THK.DL_", femExists )
  1093.     if OLEINCLUDED% = 1 THEN
  1094.         IF (OLE2_16% = 1) OR (OLE2AUTO_16% = 1) THEN
  1095.             IF OLE16RUNAPP% = 1 THEN
  1096.                 '' Force all OLE2 DLLS to be copied during reboot.
  1097.                 i% = SetErrorMode(-32768)
  1098.                 i% = LoadLibrary(DESTSYS$ + "compobj.dll")
  1099.                 i% = LoadLibrary(DESTSYS$ + "ole2.dll")
  1100.                 i% = LoadLibrary(DESTSYS$ + "ole2prox.dll")
  1101.                 i% = LoadLibrary(DESTSYS$ + "ole2conv.dll")
  1102.                 i% = LoadLibrary(DESTSYS$ + "storage.dll")
  1103.                 i% = LoadLibrary(DESTSYS$ + "ole2nls.dll")
  1104.                 i% = LoadLibrary(DESTSYS$ + "ole2disp.dll")
  1105.                 i% = LoadLibrary(DESTSYS$ + "typelib.dll")
  1106.                 OLE_PROTECT% = 1
  1107.             END IF
  1108.             AddSectionFilesToCopyList "OleWindowsSystem", SrcDir$, DESTSYS$
  1109.         END IF
  1110.         IF OLE2_32% = 1 THEN
  1111.             AddSectionFilesToCopyList "OleWindowsSystemWin32s", SrcDir$, DESTSYS$ + "WIN32S\"
  1112.         END IF
  1113.         IF (OLE2_16% = 1) OR (OLE2_32% = 1) OR (OLE2AUTO_16% = 1) THEN
  1114.             AddSectionFilesToCopyList "Ole2RegWindowsSystem", SrcDir$, DESTSYS$
  1115.         END IF
  1116.         IF (OLE2AUTO_16% = 1) THEN
  1117.             AddSectionFilesToCopyList "StdoleWindowsSystem", SrcDir$, DESTSYS$
  1118.             IF (OLE16RUNAPP and DoesFileExist(DESTSYS$ + "stdole.tlb", femExists) ) THEN
  1119.                 ' copy stdole.tlb -> tempfile1
  1120.                 stdole1$ = DESTSYS$ + GetTempFileAt(DESTSYS$, "STD")
  1121.                 CopyFile DESTSYS$+"STDOLE.TLB", stdole1$, cmoOverwrit, 0
  1122.                 OLE_OLEBOOT% = 1
  1123.             ENDIF
  1124.         END IF
  1125.     END IF
  1126.  
  1127.     SetRestartDir GetWindowsDir()
  1128.  
  1129.     CopyFilesInCopyList
  1130.  
  1131.     IF (OLEINCLUDED% = 1) THEN
  1132.         RecoverFromCopy DESTSYS$ + "compobj.dll"
  1133.         RecoverFromCopy DESTSYS$ + "ole2.dll"
  1134.         RecoverFromCopy DESTSYS$ + "ole2prox.dll"
  1135.         RecoverFromCopy DESTSYS$ + "ole2conv.dll"
  1136.         RecoverFromCopy DESTSYS$ + "storage.dll"
  1137.         RecoverFromCopy DESTSYS$ + "ole2nls.dll"
  1138.         RecoverFromCopy DESTSYS$ + "ole2disp.dll"
  1139.         RecoverFromCopy DESTSYS$ + "typelib.dll"
  1140.     END IF
  1141.  
  1142.     IF (OLE_PROTECT% = 1) THEN
  1143.         '' Free all previously loaded libraries
  1144.         FreeLibrary GetModuleHandle("compobj")
  1145.         FreeLibrary GetModuleHandle("ole2")
  1146.         FreeLibrary GetModuleHandle("ole2prox")
  1147.         FreeLibrary GetModuleHandle("ole2conv")
  1148.         FreeLibrary GetModuleHandle("storage")
  1149.         FreeLibrary GetModuleHandle("ole2nls")
  1150.         FreeLibrary GetModuleHandle("ole2disp")
  1151.         FreeLibrary GetModuleHandle("typelib")
  1152.         OLE_PROTECT% = 0
  1153.     END IF
  1154.     IF (OLE_OLEBOOT% = 1) THEN
  1155.             'rename new stdole.tlb -> tempfile2
  1156.             stdole2$ = GetTempFileAt(DESTSYS$, "STD")
  1157.             RemoveFile DESTSYS$+stdole2$, cmoForce
  1158.             RenameFile DESTSYS$+"STDOLE.TLB" , stdole2$
  1159.             'rename tempfile1 -> stdole.tlb
  1160.             RenameFile stdole1$, "STDOLE.TLB"
  1161.             'write to _mssetup.bat: rename tempfile2 to stdole.tlb
  1162.             WriteLine DESTWIN$+"_MSSETUP.BAT", ""
  1163.             WriteLine DESTWIN$+"_MSSETUP.BAT", "DEL "+DESTSYS$+"STDOLE.TLB"
  1164.             WriteLine DESTWIN$+"_MSSETUP.BAT", "REN "+DESTSYS$+stdole2$+" STDOLE.TLB"
  1165.     ENDIF
  1166.     IF OLEINCLUDED% AND (OLE2_16% OR OLE2_32% OR OLE2AUTO_16%) THEN
  1167.         IF OLE16RUNAPP% THEN
  1168.             reg1$ = DESTWIN$ + GetTempFileAt(DESTWIN$, "REG")
  1169.             CopyFile DESTWIN$+"REG.DAT", reg1$, cmoOverwrit, 0
  1170.         ENDIF
  1171.  
  1172.         RUN "regedit /s " + DESTSYS$ + "ole2.reg"
  1173.  
  1174.         IF OLE16RUNAPP% THEN
  1175.             reg2$ = GetTempFileAt(DESTWIN$, "REG")
  1176.             RemoveFile DESTWIN$ + reg2$, cmoForce
  1177.             RenameFile DESTWIN$ + "REG.DAT" , reg2$
  1178.             'rename tempfile1 -> reg.dat
  1179.             RenameFile reg1$, "REG.DAT"
  1180.             'write to _mssetup.bat: rename tempfile2 to reg.dat
  1181.             WriteLine DESTWIN$+"_MSSETUP.BAT", ""
  1182.             WriteLine DESTWIN$+"_MSSETUP.BAT", "DEL "+DESTWIN$+"REG.DAT"
  1183.             WriteLine DESTWIN$+"_MSSETUP.BAT", "REN "+DESTWIN$ + reg2$+" REG.DAT"
  1184.             OLE_OLEBOOT% = 1
  1185.         ENDIF
  1186.     END IF
  1187. END SUB
  1188.  
  1189. SUB UpdateSystemIni STATIC
  1190.  
  1191.     VxDPath$ = DEST32S$ + "W32S.386"
  1192.     SystemIniPath$ = GetWindowsDir()
  1193.  
  1194.     t% = MakeSystemIni(SystemIniPath$, VxdPath$)
  1195.  
  1196. END SUB
  1197.  
  1198. FUNCTION RebootSystem(OLEONLY%) STATIC AS INTEGER
  1199.  
  1200. '   Check if any files were locked during install.  If the RestartList
  1201. '   is not empty, ExitExecRestart() will restart Windows, cleanup setup
  1202. '   files, and copy over locked files before Windows restarts.
  1203.     i% = RestartListEmpty()
  1204.     IF i% = 0 THEN
  1205. '      ExitExecRestart() only returns if applications refuse to be shutdown.
  1206. '      Win32s is installed but will not operate until Windows is restarted
  1207. '      and the Win32s VxD is loaded.
  1208.        i% = ExitExecRestart()
  1209.        RebootSystem = 0
  1210.     ELSE
  1211. '      If the RestartList list is empty, it is necessary to restart windows
  1212. '      directly.  The MSSETUP program creates _MSRSTRT.EXE and _MSSETUP.BAT
  1213. '      in the restart directory.  This program should be exec'd to handle
  1214. '      proper MSSETUP cleanup (temp files) and restart Windows.
  1215.        IF (OLEONLY% = 1) THEN
  1216.            RebootSystem = 1
  1217.        ELSE
  1218.            i% = ExitWindowsExec( GetWindowsDir() + "_MSRSTRT.EXE", "_MSSETUP.BAT" )
  1219.            RebootSystem = 0
  1220.        END IF
  1221.     ENDIF
  1222.  
  1223. END FUNCTION
  1224.  
  1225.  
  1226. '**
  1227. '** Purpose:
  1228. '**     Appends a file name to the end of a directory path,
  1229. '**     inserting a backslash character as needed.
  1230. '** Arguments:
  1231. '**     szDir$  - full directory path (with optional ending "\")
  1232. '**     szFile$ - filename to append to directory
  1233. '** Returns:
  1234. '**     Resulting fully qualified path name.
  1235. '*************************************************************************
  1236. FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING
  1237.     IF szDir$ = "" THEN
  1238.     MakePath = szFile$
  1239.     ELSEIF szFile$ = "" THEN
  1240.     MakePath = szDir$
  1241.     ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN
  1242.     MakePath = szDir$ + szFile$
  1243.     ELSE
  1244.     MakePath = szDir$ + "\" + szFile$
  1245.     END IF
  1246. END FUNCTION
  1247.  
  1248. FUNCTION GetTempFileAt(szDir$, szPrefix$) STATIC AS STRING
  1249.     szCurDir$ = CURDIR$
  1250.     CHDIR szDir$ + "."
  1251.     szTempFile$ = STRING$(144, "E")
  1252.     i% = GetTempFileName(TF_FORCEDRIVE, szPrefix$,0, szTempFile$)
  1253.     CHDIR szCurDir$
  1254.     GetTempFileAt = MID$(szTempFile$,3)
  1255. END FUNCTION
  1256.  
  1257. SUB RecoverFromCopy(szFileName$) STATIC
  1258.     IF DoesFileExist(szFileName$, femExist) = 0 THEN
  1259.         szBackFile$ = MID$(szFileName$, 1, LEN(szFileName$)-3) + VERNUM$
  1260.         IF DoesfileExist(szBackFile$, femExist) = 0 THEN
  1261.             i% = DoMsgBox("ERROR: Could not find backup file "+szBackfile$, "Setup Error", MB_ICONEXLAMATION + MB_OK)
  1262.         ELSE
  1263.             CopyFile szBackFile$, szFileName$, cmoTimeStamp, 0
  1264.         END IF
  1265.     END IF
  1266. END SUB
  1267.